package com.youlu.campus.monitor.service.impl;

import com.youlu.campus.monitor.entity.WechatMonitorConfig;
import com.youlu.campus.monitor.repositories.WechatMonitorConfigRepository;
import com.youlu.campus.monitor.service.WechatMonitorConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import javax.annotation.Resource;

/**
 * 微信监控配置业务逻辑实现类
 * 核心控制“仅存一条数据”的业务规则，处理参数校验与异常
 *
 * @author su
 * @date 2025/09/02
 */
@Service
@Slf4j
public class WechatMonitorConfigServiceImpl implements WechatMonitorConfigService {

    @Resource
    private WechatMonitorConfigRepository configRepository;

    // 获取第一条数据（按createTime降序）
    public WechatMonitorConfig getFirstConfig() {
        // 定义排序规则：按createTime降序
        Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
        // 查询所有数据并排序，取第一条（findAll返回Iterable，需转换为Stream处理）
        return configRepository.findAll(sort).stream().findFirst().orElse(null);
    }

    @Override
    public WechatMonitorConfig saveConfig(WechatMonitorConfig config) {
        // 1. 参数校验：配置实体与状态字段非空，状态值仅允许0或1
        Assert.notNull(config, "配置实体不能为null");
        Assert.notNull(config.getWechatMonitorStatus(), "监控状态（wechatMonitorStatus）不能为空");
        Assert.isTrue(config.getWechatMonitorStatus() == 0 || config.getWechatMonitorStatus() == 1,
                "监控状态仅允许值：0-禁用，1-启用");
        // 2. 单条数据校验：已存在配置则不允许新增
        WechatMonitorConfig existConfig = this.getFirstConfig();
        if (existConfig != null) {
            config.setId(existConfig.getId());
        }
        // 3. 保存数据并返回
        WechatMonitorConfig savedConfig = configRepository.save(config);
        log.info("新增微信监控配置成功，id={}，状态={}", savedConfig.getId(), savedConfig.getWechatMonitorStatus());
        return savedConfig;
    }


    @Override
    public WechatMonitorConfig getCurrentConfig() {
        // 查询单条配置，不存在则抛异常（提示初始化）
        return this.getFirstConfig();
    }

}
